<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // var promise = new Promise(function(resolve, reject) {
        //     resolve(100)
        // })

        // var p1 = promise.then( function (value) {
        //     console.log(value);
        //     return p1;
        // })

        // p1.then(function () {}, function(reason) {
        //     console.log(reason.message);
        // })

        // promise
        //     .then(value => value)
        //     .then(value => value)
        //     .then(value => console.log(value))


        // function p1 () {
        //     return new Promise(function (resolve, reject) {
        //         setTimeout(function () {
        //             resolve('p1')
        //         }, 2000)
        //     })
        // }

        // function p2 () {
        //     return new Promise(function (resolve, reject) {
        //         resolve('p2')
        //     })
        // }    
        
        // //先得到p1结果 再得到p2结果
        // //按照异步代码调用的顺序 得到异步调用结果
        // Promise.all(['a', 'b', p1(), p2(), 'c']).then(function(result) {
        //     //result => ['a', 'b', 'p1', 'p2', 'c']
        // })


        function p1() {
            return new Promise(function (resolve, reject) {
                resolve('hello')
            })
        }

        //resolve方法的参数传入及传出  判断参数是否是promise对象
        // Promise.resolve(10).then(value => console.log(value));
        // Promise.resolve(p1()).then(value => console.log(value));

        //finally方法无论promise对象返回的结果是成功还是失败 其方法都会执行一次  
        //并且可以使用链式调用then方法获取最终的返回结果
        //不是静态方法 而是定义在MyPromise的原型对象上
        // p1().finally(() => {
        //     console.log('finally');
        // }).then(value => console.log(value)) 

        p1()
            .then(value => console.log(value))
            .catch(reason => console.log(reason))
    </script>
</body>
</html>